import axios from 'axios';
import router from '../router'
import store from '../store'

// 实例化一个 AXIOS对象
const http = axios.create({
  baseURL: '/',
  timeout: 3000
});

// 请求拦截
http.interceptors.request.use(function (config) {
  // config 是请求参数配置
  // 如果本地有 token 就应该发送给后端，格式如下
  let token = store.state.userStore.token;

  if (token) {
    config.headers['Authorization'] = 'Bearer ' + token;
  }

  return config;
}, function (error) {
  return Promise.reject(error);
});

// 响应拦截
http.interceptors.response.use(function (response) { // 成功响应
  // 将服务器返回的最新token更新
  if (response.data.token) {
    store.dispatch('userStore/setToken', response.data.token)
  }

  return response;
}, function (error) { // 失败相应 -统一处理所有失败
  console.log('统一处理失败：', error);

  switch (error.response.status) {
    case 401:
      return router.push({
        path: '/login',
        // query: { // 记录原来想访问的路径，下次登录成功后直接跳转到该路径
        //   redirect: router.currentRoute.fullPath
        // }
      });
    case 408:
      return console.log('请求超时');
    case 500:
      return console.log('服务器端出错');
  }
  return Promise.reject(error);
});

export default http;